package client;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import common.ComandiException;

public class SchermataFuoriPartita extends JFrame {
	private static final long serialVersionUID = 1L;
		
	private JButton creaRazza=new JButton("CREA RAZZA DINOSAURI");
	private JButton listaGiocatori=new JButton("LISTA GIOCATORI");
	private JButton classifica=new JButton("CLASSIFICA");
	private JButton accessoPartita=new JButton("ACCESSO PARTITA");
	private JButton logout=new JButton("LOGOUT");
	
	private Client client;
	private String razza;
	private char tipo;
	private char tipoS;
	
	private Grafica grafica;
	
	private JButton sound;
	private JPanel panel_north;
	
	private static final Color coloreBottoni=new Color(205, 184, 145);
	
	
	public SchermataFuoriPartita(Client client, Grafica grafica) {
	
		super("L'isola Dei Dinosauri");
		this.client=client;
		this.grafica=grafica;
		
		//JPanel con Grid Layout
		JPanel panel_grid=new JPanel(new GridLayout(5,1));
		panel_grid.setBorder(BorderFactory.createTitledBorder(""));
		panel_grid.add(creaRazza);
		panel_grid.add(listaGiocatori);
		panel_grid.add(classifica);
		panel_grid.add(accessoPartita);
		panel_grid.add(logout);
		
		//JFrame 
		//setExtendedState(Frame.MAXIMIZED_BOTH);
		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
		
		setLayout(new BorderLayout());
		panel_north=new JPanel();
		
		sound= new JButton();
		sound.setIcon(new Immagine("soundOn.png")); 
		sound.setPreferredSize(new Dimension(20, 20));
		sound.setBounds(0, 0, 20, 20);
		//sound.setHorizontalAlignment(JButton.RIGHT);
		panel_north.add(sound);
	
		
		
		add( panel_north, BorderLayout.NORTH);		
				
		//add(new JButton("South"), BorderLayout.SOUTH);
		
		JLabel immagineCenter= new JLabel();
		immagineCenter.setIcon(new Immagine("sfondoFP.png")); 
		//immagineCenter.setHorizontalAlignment( JLabel.CENTER );
		add(immagineCenter, BorderLayout.CENTER);
			
		add(panel_grid, BorderLayout.EAST);
		//add(new JButton("West"), BorderLayout.WEST);
		pack();
		
		setLocation(100, 100);
		setVisible(true);
		
		sound.addActionListener(new AscoltatoreSound());
		creaRazza.addActionListener(new AscoltatoreCreaRazza());
		listaGiocatori.addActionListener(new AscoltatoreListaGiocatori());
		classifica.addActionListener(new AscoltatoreClassifica());
		accessoPartita.addActionListener(new AscoltatoreAccessoPartita());
		logout.addActionListener(new AscoltatoreLogout());
		
		creaRazza.setBackground(coloreBottoni);
		listaGiocatori.setBackground(coloreBottoni);
		classifica.setBackground(coloreBottoni);
		accessoPartita.setBackground(coloreBottoni);
		logout.setBackground(coloreBottoni);
		
	}
	
	public JButton getSound() {
		return sound;
	}

	public void setSound(JButton sound) {
		this.sound = sound;
	}

	public JPanel getPanel_north() {
		return panel_north;
	}

	public void setPanel_north(JPanel panel_north) {
		this.panel_north = panel_north;
	}

	private class AscoltatoreCreaRazza implements ActionListener{
		public void actionPerformed(ActionEvent e){
			String action=e.getActionCommand();
			
			razza = JOptionPane.showInputDialog("Nome razza","Razza");
			Object[] possibleValues = {"Carnivoro", "Erbivoro"};
			Object sel_input = JOptionPane.showInputDialog(null, "Tipo Razza", "Tipo",JOptionPane.INFORMATION_MESSAGE, null,possibleValues, possibleValues[0]);
			
			if(sel_input==null)
				sel_input="RazzaDefault";
				
			char tipoS=Character.toLowerCase(new String((String) sel_input).toCharArray()[0]);  // oppure con cast    input = (String) sel_input;

			
			 if(tipoS=='c'|| tipoS=='e')
					tipo=tipoS;
				else
					tipo='z';//impostato errato per creare errore
				try{
					String s=client.getServerInt().creaRazza(client.getToken(),razza,tipo); 
					client.ok();
				}catch(ComandiException ex){
					client.no(ex.getMessage());
				}
				catch(IOException ex){
					client.no("errore di connessione");
				}

		}
	}
	
	private class AscoltatoreListaGiocatori implements ActionListener{
		public void actionPerformed(ActionEvent e){
			String action=e.getActionCommand();
			
			try{
				String[] lista= client.getServerInt().listaGiocatori(client.getToken()); 
				client.listaGiocatori(lista);
			}catch(ComandiException ex){
				client.no(ex.getMessage());
			}		
			catch(IOException ex){
				client.no("errore di connessione");
			}
		}
	}
	
	private class AscoltatoreClassifica implements ActionListener{
		public void actionPerformed(ActionEvent e){
			String action=e.getActionCommand();
			
			try{
				String[] classifica=client.getServerInt().classifica(client.getToken()); 
				client.classifica(classifica);
			}catch(ComandiException ex){
				client.no(ex.getMessage());
			}
			catch(IOException ex){
				client.no("errore di connessione");
			}
		}
	}
	
	private class AscoltatoreAccessoPartita implements ActionListener{
		public void actionPerformed(ActionEvent e){
			String action=e.getActionCommand();
			
			try{
				client.getServerInt().accessoPartita(client.getToken()); 
				client.setInPartita(true);
				client.ok();
				dispose();
				synchronized (client.getVisual()){
					client.getVisual().notifyAll();
				}
			}catch(ComandiException ex){
				client.setInPartita(false);
				client.no(ex.getMessage());
			}
			catch(IOException ex){
				client.no("errore di connessione");
			}
			
			
		}
	}
	
	private class AscoltatoreLogout implements ActionListener{
		public void actionPerformed(ActionEvent e){
			String action=e.getActionCommand();
			
			try{
				String s=client.getServerInt().logout(client.getToken()); 
				client.setLoggato(false);
				client.setToken(null);
				client.ok();
				dispose();
				synchronized (client.getVisual()){
					client.getVisual().notifyAll();
				}
			}catch(ComandiException ex){
				client.setLoggato(true);
				client.no(ex.getMessage());
			}catch(IOException ex){
				client.no("errore di connessione");
			}
			
			
		}
	}
	
	private class AscoltatoreSound implements ActionListener{
		public void actionPerformed(ActionEvent e){
			String action=e.getActionCommand();
			if(grafica.isOn()){
				grafica.getS2().stop();
				sound.setIcon(new Immagine("soundOff.png"));
				grafica.setOn(false);
			}else{
				grafica.getS2().inizializzatore();
				sound.setIcon(new Immagine("soundOn.png"));
				grafica.setOn(true);
			}
		}
	}
}